//
//  LineView.m
//  03-基本图形绘制
//
//  Created by J on 16/2/23.
//  Copyright © 2016年 J. All rights reserved.
//

#import "LineView.h"

@implementation LineView


//通常在这个方法里绘制图形
//只有在这个方法里面才能获取到跟View的layer相关联的图形上下文
//什么时候调用:当这个view要显示的时候才会调用drawRect 方法绘制图形调用一次 viewWillAppear的时候调用
- (void)drawRect:(CGRect)rect {//rect当前空间的bounds
    //绘图步骤 1.获取上下文 2.创建路径(描述路径) 3.路径添加到上下文 4.渲染上下文
    
 
    //如何绘制曲线
    
    //原生绘制方法
    
    //获取上下文
    CGContextRef ref = UIGraphicsGetCurrentContext();
    //设置路径
    
    //设置起点
    
    CGContextMoveToPoint(ref, 50, 150);

//    CGFloat cpx,  //控制点 x坐标
//    CGFloat cpy,  //控制点 y坐标
//    CGFloat x,  //直线的终点 x坐标
//    CGFloat y  //直线的终点 y坐标
    CGContextAddQuadCurveToPoint(ref, 150, -100, 200, 150);//y相同


    
    //渲染上下文
    CGContextStrokePath(ref);
    
    
    
    
    
 
}

//UIBezierPath画线 2条
- (void)drawUIBezierPathState{
    //分开划线可以分开设置颜色之类的属性
    UIBezierPath * path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(50, 50)];
    [path addLineToPoint:CGPointMake(200, 200)];
    path.lineWidth =10;
    [[UIColor orangeColor]set];
    [path stroke];
    
    
    UIBezierPath * path2 = [UIBezierPath bezierPath];
    [path2 moveToPoint:CGPointMake(50, 90)];
    [path2 addLineToPoint:CGPointMake(200, 220)];
    path2.lineWidth =10;
    [[UIColor purpleColor]set];
    [path2 stroke];
}

- (void)awakeFromNib{
    [super awakeFromNib];
    //无法绘制 因为 只有drawRect才能获取到当前view的图形上下文
//    UIBezierPath * path = [UIBezierPath bezierPath];
//    [path moveToPoint:CGPointMake(0, 0)];
//    [path addLineToPoint:CGPointMake(200, 200)];
//    [path stroke];
    

    
}


//设置状态
- (void)drawStatus{

    //获取上下文
    CGContextRef ref = UIGraphicsGetCurrentContext();
    //    //描述路径
    CGContextMoveToPoint(ref, 50, 50);
    CGContextAddLineToPoint(ref, 100, 50);
    //    //画第二根线的时候不用再设置起点 默认下一根线上的起点就是上一根线的重点
    //
    //    //给第二根线添加新起点
    //    CGContextMoveToPoint(ref, 100, 70);
    //
    CGContextAddLineToPoint(ref, 100, 150);
    //
    //      //设置绘图状态 一定要在渲染之前设置
    //    //颜色
    [[UIColor orangeColor] setStroke];
    
    //线宽度
    CGContextSetLineWidth(ref, 10);
    
    //设置连接样式
    CGContextSetLineJoin(ref, kCGLineJoinRound);
    
    //设置顶角样式
    CGContextSetLineCap(ref, kCGLineCapRound);
    
    //渲染上下文
    CGContextStrokePath(ref);
    

    
}

//画线第三种方式
- (void)drawLine3{
    
    //UIKit已经封装了一些绘图的功能
    //贝赛尔路径 不用获取上下文 底层已经自动获取
    UIBezierPath * path = [UIBezierPath bezierPath];
    //设置起点
    [path moveToPoint:CGPointMake(0, 0)];
    
    //添加一根线到某个点
    [path addLineToPoint:CGPointMake(200, 200)];
    
    //绘制路径
    [path stroke];

}

//画线第二种方式
- (void)drawLine2{
    
    //获取上下文
    CGContextRef ref = UIGraphicsGetCurrentContext();
    //描述路径
    CGContextMoveToPoint(ref, 0, 0);//底层自动封装一些路径  路径已经自动添加了就不用再自己添加了
    CGContextAddLineToPoint(ref, 200, 200);
    
    //渲染上下文
    CGContextStrokePath(ref);//这种方式不用我们管理路径
    
    
}



//画线第一种方式
- (void)drawLine{
    
    
    //1.获取图形上下文
    //获取的时候系统会自动创建
    //    CGContextRef Ref:引用 CG:目前使用到的类型和函数 一般都是CG开头 CoreGraphics
    CGContextRef ref  = UIGraphicsGetCurrentContext();
    //    NSLog(@"%@",xtx);
    //2.描述路径
    //创建路径
    CGMutablePathRef path = CGPathCreateMutable();
    //设置起点
    ///  path:给路径设置起点
    CGPathMoveToPoint(path, NULL, 50, 50);
    
    //添加一根线到某个点
    CGPathAddLineToPoint(path, NULL, 200, 300);
    
    //3.把路径添加到上下文
    CGContextAddPath(ref, path);
    
    //4.渲染上下文到view的layer
    CGContextStrokePath(ref);//描边绘制这个路径 参数传上下文
    
    
}

@end
